package LeetCode;
/*括号匹配*/
import java.util.Deque;
import java.util.LinkedList;
import java.util.Stack;
import java.util.concurrent.DelayQueue;

public class Leetcode_20 {
    public static void main(String[] args) {
        String s="()";
        System.out.println(isValid(s));
        Deque<Integer> q=new LinkedList();
    }
    public static boolean isValid(String s) {
//        Stack<Character> stack = new Stack<>();//创建栈
//        //for循环遍历栈
//        for(int i=0;i<s.length();i++){
//            char c=s.charAt(i);//获取当前位置元素
//            //当此时是左括号时，入栈
//            if(c=='('||c=='{'||c=='['){
//                stack.push(c);
//            }
//            //如果此时不是左括号（是右括号）并且栈为空，说明括号不匹配，则返回false
//            if(stack.isEmpty()){
//                return false;
//            }
//            //当前元素时右括号
//            if(c==')'||c==']'||c=='}'){
//                Character top = stack.pop();
//                //判断括号是否匹配
//                if((top=='('&&c!=')')||(top=='['&&c !=']')||(top=='{'&&c!='}')){
//                    return false;
//                }
//            }
//        }
//        if (stack.isEmpty()) {
//            return true;
//        }
//        return false;



        Stack<Character> stack = new Stack<>();//创建栈
        //for循环遍历栈
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);//获取当前元素、
            //如果当前元素时左圆括号，则入栈右圆括号
            //如果当前元素时左方括号，则入栈右方括号
            //如果当前元素时左花括号，则入栈右花括号
            if(c=='('){
                stack.push(')');
            }else if(c=='{'){
                stack.push('}');
            }else if(c=='['){
                stack.push(']');
            }else if(stack.isEmpty()||c!=stack.pop()){
                //判断是否匹配
                return false;
            }
        }
        if(stack.isEmpty()){
            return true;
        }
        return false;
    }
}
